package com.itheima.readDemo;

import org.junit.Test;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author zcy
 * @date 2020-09-12 16:17
 */

    /*
    书架:
         1,查看书架所有书籍
            1.1查看书籍章节
         2,向书架中添加书籍
         3,删除书架里面的书籍
         4,返回首页
    * */
public class BookRack2 {
    Scanner sc = new Scanner(System.in);
    public void start(ArrayList<Book> list) throws IOException {
        loop:
        while (true) {
            System.out.println("--------------------------欢迎来到您的书架:---------------------------\n" +
                    "1.查看书架所有书籍    2.向书架中添加书籍    3.删除书架里面的书籍    4.返回首页");
            System.out.println("请输入您的选择");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    System.out.println("1.查看书架所有书籍");
                    findBook();
                    break;
                case "2":
                    //System.out.println("2.向书架中添加书籍");
                    addBook(list);
                    break;
                case "3":
                    //System.out.println("3.删除书架里的书籍");
                    deleteBook();
                    break;
                case "4":
                    System.out.println("4.返回首页");
                    break loop;
                default:
                    System.out.println("您的选择有误请重新输入");
            }
        }
    }

    public void deleteBook() throws IOException {
        //读取书架中的书籍
        BufferedReader br = new BufferedReader(new FileReader("e:\\others\\bookrack.txt"));
        String line;

        //将书架里面的书籍添加到一个集合里面
        ArrayList<String> listRack = new ArrayList<>();
        while ((line = br.readLine()) != null) {
            listRack.add(line);
            //打印书架中书籍的名称
            System.out.print(line + " ");
        }
        System.out.println();
        System.out.println("-----------------------");

        //将删除后的数据从新写回到书架里面

        loop:while (true) {
            //键盘录入要查看的书籍
            System.out.println("请输入您要删除的书籍");
            String delName = sc.next();
            //做个标记,用于记录输入书籍是否已经存在于书架里面
            //不存在书架中为true
            boolean flag = true;
            //遍历集合判断输入书籍是否已经存在于书架里面
            for (String s : listRack) {
                if (delName.equals(s)) {
                    //已经存在于书架里面则为false
                    flag = false;
                }
            }

            if (!flag) {
                BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\others\\bookrack.txt"));
                for (String s : listRack) {
                    //判断如果是要删除的书籍名称,则不写回书架中
                    if(!delName.equals(s)){
                        bw.write(s);
                        bw.newLine();
                        bw.flush();
                    }
                }
                System.out.println("删除成功!");
                break loop;
            } else {
                System.out.println("您输的书籍不在书架里面,请重新输入");
            }
        }
    }

    public void findBook() throws IOException {

        //读取书架中的书籍
        BufferedReader br = new BufferedReader(new FileReader("e:\\others\\bookrack.txt"));
        String line;

        //将书架里面的书籍添加到一个集合里面
        ArrayList<String> listRack = new ArrayList<>();
        while ((line = br.readLine()) != null) {
            listRack.add(line);
            //打印书架中书籍的名称
            System.out.print(line + "");
        }
        System.out.println();
        System.out.println("-----------------------");
        loop:
        while (true) {
            System.out.println("查看小说正文请输入1,退出书架请输入2");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    //键盘录入要查看的书籍
                    System.out.println("请输入您要查看的书籍");
                    String bookName = sc.next();
                    //第二个标记,用于记录输入书籍是否已经存在于书架里面
                    //不存在书架中为true
                    boolean flag = true;
                    //遍历集合判断输入书籍是否已经存在于书架里面
                    for (String s : listRack) {
                        if (bookName.equals(s)) {
                            //已经存在于书架里面则为false
                            flag = false;
                        }
                    }
                    if (flag) {
                        System.out.println("书籍不存在,请输入书架存在的书籍");
                    } else {
                        //跳转查看正文方法
                        System.out.println("查看书籍正文");
                        break loop;
                    }
                    break;
                case "2":
                    return;
                default:
                    System.out.println("您输入的选项有误,请重新输入");
            }
        }
    }

    public void addBook(ArrayList<Book> list) throws IOException {
        /*自己添加的集合用于测试添加书架的方法
        ArrayList<Book> list = new ArrayList<>();
        Book book1 = new Book();
        book1.setBookTitle("早上好");
        list.add(book1);*/

        //将书籍添加到书架里面,(书架以文档的方式储存)
        BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\others\\bookrack.txt", true));
        //读取书架书籍,判断书籍是否已经存在
        BufferedReader br = new BufferedReader(new FileReader("e:\\others\\bookrack.txt"));
        String line;

        /*//遍历集合,得到每一个book对象(是否保留存疑)
        for (Book book : list) {
            String bookTitle = book.getBookTitle();
            System.out.print(bookTitle + " ");
        }
        System.out.println();*/

        //将书架里面的书籍添加到一个集合里面
        ArrayList<String> listRack = new ArrayList<>();
        while ((line = br.readLine()) != null) {
            listRack.add(line);
        }

        //做第一个标记,用于判断键盘录入的书籍是否存在
        boolean flag1 = false;
        loop:
        while (true) {
            System.out.println("请输入您要添加到书架的书籍");
            String bookName = sc.next();
            //遍历全部书籍集合,用于判断输入书籍是否是已经存在的书籍
            for (Book book : list) {
                if (bookName.equals(book.getBookTitle())) {
                    flag1 = true;
                    break;
                }
            }

            //第二个标记,用于记录输入书籍是否已经存在于书架里面
            //不存在书架中为true
            boolean flag2 = true;
            //遍历集合判断输入书籍是否已经存在于书架里面
            for (String s : listRack) {
                if (bookName.equals(s)) {
                    //已经存在于书架里面则为false
                    flag2 = false;
                }
            }

            //flag1代表该书籍存在于小说阅读器里面
            //flag2代表概述及不存在于书架里面
            if (flag1 && flag2) {
                bw.write(bookName);
                bw.newLine();
                bw.flush();
                System.out.println("添加成功!");
                break loop;
            } else if (!flag1) {
                System.out.println("您输入的书籍不存在,请重新输入");
            } else if (flag1 && !flag2) {
                System.out.println("您输入的书籍已经存在于书架中,请勿重读添加");
                break loop;
            }
        }
        br.close();
        bw.close();
    }
}
